/*
 * @Author: zxc
 * @Date: 2020-11-10 09:29:12
 * @LastEditTime: 2020-11-10 13:09:38
 * @LastEditors: zxc
 * @Description:代理模式
 */
import loading from "../assets/images/loading.gif"

/**
 * @Author: zxc
 * @Date: 2020-11-10 09:40:50
 * @func 送花=>非代理
 */
// let Flower = function () {}
// let xiaoming = {
//   sendFlower(target) {
//     let flower = new Flower()
//     target.receiveFlower(flower)
//   }
// }
// let nvsheng = {
//   receiveFlower(flower) {
//     console.log("收到花惹" + flower)
//   }
// }
// xiaoming.sendFlower(nvsheng)

/**
 * @Author: zxc
 * @Date: 2020-11-10 09:41:11
 * @func 送花=>代理
 */
// class Flower {}
// let xiaoming = {
//   senFlower(target) {
//     let flower = new Flower()
//     target.receiverFlower(flower)
//   }
// }

// let zhongjianren = {
//   receiverFlower(flower) {
//     nvsheng.receiverFlower(flower)
//   }
// }

// let nvsheng = {
//   receiverFlower(flower) {
//     console.log("收到花惹" + Object.prototype.toString.call(flower))
//   }
// }
// xiaoming.senFlower(zhongjianren)

/**
 * @Author: zxc
 * @Date: 2020-11-10 09:46:22
 * @func 送花=>代理=>监听心情
 */
// class Flower {}
// let xiaoming = {
//   senFlower(target) {
//     // let flower = new Flower()
//     target.receiverFlower()
//   }
// }

// let zhongjianren = {
//   receiverFlower() {
//     nvsheng.listenGoodMood(function () {
//       let flower = new Flower()
//       nvsheng.receiverFlower(flower)
//     })
//   }
// }

// let nvsheng = {
//   receiverFlower(flower) {
//     console.log("收到花惹" + Object.prototype.toString.call(flower))
//   },
//   listenGoodMood(fn) {
//     setTimeout(function () {
//       fn()
//     }, 1000)
//   }
// }
// xiaoming.senFlower(zhongjianren)

/**
 * @Author: zxc
 * @Date: 2020-11-10 09:55:06
 * @func 懒加载图片=>虚拟代理
 */
// let myImage = (function () {
//   let imgNode = document.createElement("img")
//   document.body.appendChild(imgNode)
//   return {
//     setSrc(src) {
//       imgNode.src = src
//     }
//   }
// })()
// let proxyImage = (function () {
//   let img = new Image()
//   img.onload = function (e) {
//     myImage.setSrc(this.src)
//   }
//   return {
//     setSrc(src) {
//       myImage.setSrc(loading)
//       console.log(1)
//       img.src = src
//     }
//   }
// })()
// proxyImage.setSrc(
//   "https://pic1.zhimg.com/80/v2-97e5a79e2dbea7475b2accde9ba5a9a4_720w.jpg?source=1940ef5c"
// )

/**
 * @Author: zxc
 * @Date: 2020-11-10 10:32:27
 * @func 图片预加载=>非代理
 */
// let myImage = (function () {
//   let imgNode = document.createElement("img")
//   document.body.appendChild(imgNode)
//   let img = new Image()
//   img.onload = function () {
//     imgNode.src = img.src
//   }
//   return {
//     setSrc(src) {
//       imgNode.src = loading
//       img.src = src
//     }
//   }
// })()
// myImage.setSrc(
//   "https://pic1.zhimg.com/80/v2-97e5a79e2dbea7475b2accde9ba5a9a4_720w.jpg?source=1940ef5c"
// )

/**
 * @Author: zxc
 * @Date: 2020-11-10 10:57:27
 * @func 函数
 */
// let myImage = (function () {
//   let imgNode = document.createElement("img")
//   document.body.appendChild(imgNode)
//   return function (src) {
//     imgNode.src = src
//   }
// })()

// var proxyImage = (function () {
//   let img = new Image()
//   img.onload = function () {
//     myImage(this.src)
//   }
//   return function (src) {
//     myImage(loading)
//     img.src = src
//   }
// })()
// proxyImage(
//   "https://pic1.zhimg.com/80/v2-97e5a79e2dbea7475b2accde9ba5a9a4_720w.jpg?source=1940ef5c"
// )

/**
 * @Author: zxc
 * @Date: 2020-11-10 11:46:33
 * @func 代理缓存
 */
// let mult = function (...args) {
//   console.log("开算")
//   let a = 1,
//     i = 0
//   for (; i < args.length; i++) {
//     a = a * args[i]
//   }
//   return a
// }
// let proxyMult = (function () {
//   let cache = {}
//   return function (...args) {
//     if (args in cache) {
//       return cache[args]
//     }
//     return (cache[args] = mult.apply(this, args))
//   }
// })()

// console.log(proxyMult(1, 2, 4))
// console.log(proxyMult(1, 2, 4))
// console.log(proxyMult(1, 2, 4))

/**
 * @Author: zxc
 * @Date: 2020-11-10 11:53:02
 * @func 代理缓存
 */
// let mult = function (...args) {
//   console.log("开算")
//   let a = 1,
//     i = 0
//   for (; i < args.length; i++) {
//     a = a * args[i]
//   }
//   return a
// }

// let plus = function (...args) {
//   console.log("开算2")
//   let a = 0,
//     i = 0
//   for (; i < args.length; i++) {
//     a = a + args[i]
//   }
//   return a
// }

// let createProxyFactory = function (fn) {
//   let cache = {}
//   return function (...args) {
//     if (args in cache) {
//       return cache[args]
//     }
//     return (cache[args] = fn.apply(this, args))
//   }
// }

// let proyMult = createProxyFactory(mult),
//   proxyPlus = createProxyFactory(plus)
// console.log(proyMult(1, 2, 3, 4))
// console.log(proyMult(1, 2, 3, 4))
// console.log(proyMult(1, 2, 3, 4))
// console.log(proxyPlus(1, 2, 3, 4))
// console.log(proxyPlus(1, 2, 3, 4))
// console.log(proxyPlus(1, 2, 3, 4))
